#include <iostream>
#include <string>
#include <thread>

#include <unistd.h>
// thread构造函数
// 传入参数
void test1(std::string message)
{
    while (true)
    {
        std::cout << message << std::endl;
        sleep(1);
    }
}

// 传入引用
void test2(int &c)
{
    std::cout << c << std::endl;
    c = 10;
    std::cout << c << std::endl;
}

// 传入类函数
class Test
{
public:
    void f(int num)
    {
        std::cout << num << std::endl;
    }

    static void sf(int num)
    {
        std::cout << num << std::endl;
    }
};

void f1()
{
    std::string msg;
    std::cin >> msg;
    std::thread t1(test1, msg);
    t1.join();

    // 注意传入引用的时候需要使用std::ref函数来处理传入的参数
    int a = 1;
    std::thread t2(test2, std::ref(a));
    t2.join();

    // 传入类函数
    int num = 1234;
    Test *t = new Test();
    std::thread t3(&Test::f, t, num);
    std::thread t4(Test::sf, num);

    t3.join();
    t4.join();

    delete t;
}

void f2()
{
    std::thread *t1 = new std::thread(test1, "hello world!");
    t1->join();
}

int main()
{
    f2();
    return 0;
}